package com.linyaonan.leetcode.medium._1325;

/**
 *
 * 给你一棵以 root 为根的二叉树和一个整数 target ，请你删除所有值为 target 的 叶子节点 。
 *
 * 注意，一旦删除值为 target 的叶子节点，它的父节点就可能变成叶子节点；如果新叶子节点的值恰好也是 target ，那么这个节点也应该被删除。
 *
 * 也就是说，你需要重复此过程直到不能继续删除。
 *
 *
 * @author: Lin
 * @date: 2020/1/21
 */
public class DeleteLeaves {
    int t;
    public TreeNode removeLeafNodes(TreeNode root, int target) {
        t = target;
        TreeNode par = new TreeNode(-1);
        par.left = root;
        dfsDelete(root, par, true);
        return par.left;
    }

    private void dfsDelete(TreeNode node, TreeNode par, boolean isLeft) {
        if (node != null) {
            dfsDelete(node.left, node, true);
            dfsDelete(node.right, node, false);
            if (node.left == null && node.right == null && node.val == t) {
                if (isLeft) {
                    par.left = null;
                } else {
                    par.right = null;
                }
            }
        }
    }
}
